<?php
// +----------------------------------------------------------------------
// | quanli team
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2020 http://www.fistforward.com/ All rights reserved.
// +----------------------------------------------------------------------
// | Author: allen.qiang
// +----------------------------------------------------------------------


/**
 * 公共日志操作类
 * @package  htdocs
 * @subpackage  module/base
 * @author   allen.qiang
 * @version 1.0
 */
class logHandler {

    private $dbca;

    function __construct( &$dbca ) {
        $this->dbca = $dbca;
    }

    /**
     * 检查日志分类信息
     * @param int $logCategoryID 分类ID【必选】
     * @return bool
     */
    public function searchLogCategoryInfo( $logCategoryID = null ) {

        //查询分类信息
        if (is_null($logCategoryID)) {
            $search_sql = 'SELECT logCategoryID FROM log_category ORDER BY logCategoryID ASC';
            $category_array = $this->dbca->stmt_query($search_sql, 'i', $logCategoryID);
        } else {

            $search_sql = 'SELECT logCategoryID FROM log_category WHERE logCategoryID = ?';
            $category_array = $this->dbca->stmt_query($search_sql, 'i', $logCategoryID);
        }

        if ($category_array)
            return true;
        else
            return false;

    }

    /**
     * 保存日志
     * @param array $arg_array 参数数组
     * @param string $arg_array['logItem'] 日志标题，可以是单号【必选】
     * @param int $arg_array['logCategoryID'] 日志分类号【必选】
     * @param string $arg_array['operator'] 操作人【必选】
     * @param string $arg_array['extend_1'] 扩展1【可选】
     * @param string $arg_array['extend_2'] 扩展2【可选】
     * @param string $arg_array['extend_3'] 扩展3【可选】
     * @param string $arg_array['extend_4'] 扩展4【可选】
     * @param int $arg_array['extend_5'] 扩展5【可选】
     * @param int $arg_array['extend_6'] 扩展6【可选】
     * @param float $arg_array['extend_7'] 扩展7【可选】
     * @param float $arg_array['extend_8'] 扩展8【可选】
     * @param float $arg_array['extend_9'] 扩展9【可选】
     * @param float $arg_array['extend_10'] 扩展10【可选】
     * @return array
     */
    public function saveLogInfo( $arg_array ) {

        if (!isset($arg_array['logItem']) || empty($arg_array['logItem'])){
            return array('code' => 400, 'message' => '日志标题缺少或为空');
        }

        if (!isset($arg_array['logCategoryID']) || empty($arg_array['logCategoryID'])){
            return array('code' => 400, 'message' => '日志分类号缺少或为空');
        }

        if (!isset($arg_array['operator']) || empty($arg_array['operator'])){
            return array('code' => 400, 'message' => '操作人缺少或为空');

        }

        for ($i = 1; $i < 11; $i++) {
            if (!isset($arg_array['extend_' . $i])){
                $arg_array['extend_' . $i] = null;
            }
        }

        try {

            //检查分类信息
            if (!$this->searchLogCategoryInfo($arg_array['logCategoryID'])){
                throw new Exception('日志分类不存在',404);
            }

            //保存日志信息
            $log = new entity('log_detail');
            $log->creator = $arg_array['operator'];
            $log->logItem = $arg_array['logItem'];
            $log->logCategoryID = $arg_array['logCategoryID'];
            $log->extend_1  = $arg_array['extend_1'];
            $log->extend_2  = $arg_array['extend_2'];
            $log->extend_3  = $arg_array['extend_3'];
            $log->extend_4  = $arg_array['extend_4'];
            $log->extend_5  = $arg_array['extend_5'];
            $log->extend_6  = $arg_array['extend_6'];
            $log->extend_7  = $arg_array['extend_7'];
            $log->extend_8  = $arg_array['extend_8'];
            $log->extend_9  = $arg_array['extend_9'];
            $log->extend_10 = $arg_array['extend_10'];
            $this->dbca->save($log);

            return array('code' => 200, 'message' => '日志保存成功');

        } catch (Exception $e) {

            if($e->getCode() > 0){
                return array('code' => $e->getCode(), 'message' => $e->getMessage());
            }else{
                error_log($e->getMessage());
                return array('code' => 500, 'message' => '系统错误');
            }

        }

    }

    /**
     * 查询商品咨询信息
     * @param array $arg_array                          查询参数数组
     * $arg_array = array (
     *       'logCategoryID' => int 分类号
     *       'logItem' => int 日志项
     *       'sortname' => string 排序字段
     *       'sortorder' => string 排序方式
     *       'page' => int 分页页码
     *       'rp' => int 分页页数
     * )
     * @return null|array
     */
    public function searchLogInfo( &$arg_array ) {

        //sql字符串
        $sql = '';

        //参数类型字符串
        $params_type = '';

        //参数值数组
        $params_array = array();

        //分类号
        if (isset($arg_array['logCategoryID']) && is_numeric($arg_array['logCategoryID'])) {
            $sql .= ' AND logCategoryID = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['logCategoryID'];
        }

        //日志项
        if (isset($arg_array['logItem']) && !empty($arg_array['logItem'])) {
            $sql .= ' AND logItem = ?';
            $params_type .= 's';
            $params_array[] = $arg_array['logItem'];
        }

        if (isset($arg_array['extend']) && !empty($arg_array['extend'])) {
            $sql .= $arg_array['extend'];
        }

        if ($sql) {
            $sql = 'WHERE ' . substr($sql, 4);
        }

        try {

            if (isset($arg_array['rp']) && $arg_array['rp'] > 1) {

                //统计分类数量
                $search_sql = 'SELECT COUNT(*) AS item_count FROM log_detail ' . $sql;
                $count_array = &$this->dbca->stmt_query($search_sql, $params_type, $params_array);
                $item_count = $count_array[0]->item_count;
                if ($item_count == 0) {
                    $arg_array['count'] = 0;
                    return null;
                }

                $arg_array['count'] = $item_count;

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

                //分页
                if (!isset($arg_array['page']) || !is_numeric($arg_array['page']) || $arg_array['page'] <= 0)
                    $arg_array['page'] = 1;

                $sql .= sprintf(' LIMIT %d, %d', ($arg_array['page'] - 1) * $arg_array['rp'], $arg_array['rp']);

            } else {

                $arg_array['count'] = 0;

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

            }

            //查询分类信息
            $search_sql = 'SELECT * FROM log_detail ' . $sql;
            $temp_item_array = &$this->dbca->stmt_query($search_sql, $params_type, $params_array);
            if (!$temp_item_array)
                return null;

            foreach($temp_item_array as &$item) {
                $item_array[] = array(
                    'uuid' => $item->uuid,
                    'creator'=>$item->creator,
                    'createTime' => $item->createTime,
                    'logCategoryID' => $item->logCategoryID,
                    'logItem' => $item->logItem,
                    'extend_1' => $item->extend_1,
                    'extend_2' => $item->extend_2,
                    'extend_3' => $item->extend_3,
                    'extend_4' => $item->extend_4,
                    'extend_5' => $item->extend_5,
                    'extend_6' => $item->extend_6,
                    'extend_7' => $item->extend_7,
                    'extend_8' => $item->extend_8,
                    'extend_9' => $item->extend_9,
                    'extend_10' => $item->extend_10
                );
            }

            return $item_array;

        } catch (Exception $e) {

            error_log($e->getMessage());
            return null;

        }

    }

}